library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
## Warning: package 'stringr' was built under R version 3.5.1
library(plotly)
## Warning: package 'plotly' was built under R version 3.5.1
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.5.1
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(RgoogleMaps)
## Warning: package 'RgoogleMaps' was built under R version 3.5.1
library(ggmap)
## Warning: package 'ggmap' was built under R version 3.5.1
## 
## Attaching package: 'ggmap'
## The following object is masked from 'package:plotly':
## 
##     wind
github <- "https://raw.githubusercontent.com/ucb-stat133/stat133-fall-2018/master/"
datafile <- "data/mobile-food-sf.csv"
download.file(paste0(github, datafile), destfile = "mobile-food-sf.csv")
dat <- read.csv('mobile-food-sf.csv', stringsAsFactors = FALSE)

Changing Times

time1 <- '10AM'
str_sub(time1, start = 1, end = 2)
## [1] "10"
str_sub(time1, start = 3, end = 4)
## [1] "AM"
times <- c('12PM', '10AM', '9AM', '8AM', '2PM')
str_sub(times, start = 1, end = nchar(times)-2)
## [1] "12" "10" "9"  "8"  "2"
str_sub(times, start = nchar(times)-1, end = nchar(times))
## [1] "PM" "AM" "AM" "AM" "PM"
str_sub(times, start = -2)
## [1] "PM" "AM" "AM" "AM" "PM"
str_replace(times, pattern = 'AM|PM', replacement = '')
## [1] "12" "10" "9"  "8"  "2"
hours <- as.numeric(str_replace(times, pattern = 'AM|PM', replacement = ''))
hours 
## [1] 12 10  9  8  2
periods <- str_sub(times, start = -2)
periods
## [1] "PM" "AM" "AM" "AM" "PM"
period_freq <- table(periods)
plot_ly(x = names(period_freq),
        y = period_freq,
        type = 'bar')
position <- (periods == 'PM') & (hours < 12) 
for (i in 1:length(position)) {
  if (position[i]) {
    hours[i] <- hours[i] + 12
  }
  else {
    hours[i] <- hours[i]
  }
}
hours
## [1] 12 10  9  8 14
am <- (periods == 'AM') & (hours == 12)
for (i in 1:length(am)) {
  if (am[i]) {
    hours[i] <- 0
  }
  else {
    hours[i] <- hours[i]
  }
}
start24 <- hours
start24
## [1] 12 10  9  8 14

scale24 function that change to 24hr scale

scale24 <- function(x) {
  hour <- as.numeric(str_replace(x, pattern = 'AM|PM',                        replacement = ''))
  period <- str_sub(x, start = -2)
  p <- (period == 'PM') & (hour < 12) 
  for (i in 1:length(p)) {
    if (p[i]) {
      hour[i] <- hour[i] + 12
    }
    else {
     hour[i] <- hour[i]
    }
  }
  a <- (period == 'AM') & (hour == 12)
  for (i in 1:length(a)) {
    if (a[i]) {
      hour[i] <- 0
    }
    else {
      hour[i] <- hour[i]
    }
  }
  hour
}

dat$start <- scale24(dat$starttime)
dat$end <- scale24(dat$endtime)
dat$duration <- dat$end - dat$start

Latitude and Longitude Coordinates

lat_lon <- str_replace_all(dat$Location, pattern = '\\(|\\)', replacement = '')
lat_lon <- str_split(lat_lon, pattern = ',')

lat <- as.numeric(unlist(lapply(lat_lon, function(x) x[1])))
head(lat)
## [1] 37.76520 37.79079 37.71120 37.77730       NA 37.72704
lon <- as.numeric(unlist(lapply(lat_lon, function(x) x[2])))
head(lon)
## [1] -122.4165 -122.4023 -122.3947 -122.3948        NA -122.4001
dat$lat <- lat
dat$lon <- lon
head(dat)
##   DayOfWeekStr starttime endtime          PermitLocation
## 1       Friday      10AM    10PM         200 SHOTWELL ST
## 2       Friday       1PM     2PM       180 MONTGOMERY ST
## 3       Friday      10AM    11AM 101 EXECUTIVE PARK BLVD
## 4       Friday      10AM     3PM         290 TOWNSEND ST
## 5       Friday      10AM    11AM         299 ILLINOIS ST
## 6       Friday      10AM    11AM         1828 EGBERT AVE
##                                                                                                                                                                                                                                                                                                                                optionaltext
## 1                                                                                                                                                                                                                                                                       Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2                                                                                                                                                                                                                                                                                 Cold Truck: sandwiches, drinks, snacks, candy, hot coffee
## 3                                                                                                                                                                                                                                                                    Cold Truck: Pre-packaged Sandwiches, Various Beverages, Salads, Snacks
## 4                                                                                                                                                                                                                                             Hot Dogs, Hamburgers, Nachos, Steaks, Pastas, Asian Dishes, Tri-Tip Sandwiches, Sodas & Water
## 5                                                                                                                                                                                                                                                                         Cold Truck: Sandwiches, fruit, snacks, candy, hot and cold drinks
## 6 Cold Truck: Cheeseburgers, Burgers, Chicken Bake, Chili Dogs, Hot Dogs, Corn Dogs, Cup of Noodles, Egg Muffins, Tamales, Hot Sandwiches Quesadillas, Gatorade, Juice, Soda, Mikl, Coffee, Hot Cocoa, Hot Tea, Flan, Fruits, Fruit Salad, Yogurt, Candy, Chips,  Donuts, Cookies, Granola, Muffins & Various Drinks & Pre-Packaged Snacks.
##   ColdTruck         Applicant                             Location start
## 1         N Santana ESG, Inc. (37.7651967350509,-122.416451692902)    10
## 2         Y Sun Rise Catering (37.7907890558203,-122.402273431333)    13
## 3         Y   Golden Catering (37.7111991003088,-122.394693339395)    10
## 4         N  Linda's Catering (37.7773000262759,-122.394812784799)    10
## 5         Y      May Catering                                 <NA>    10
## 6         Y     Bach Catering (37.7270392647114,-122.400141029645)    10
##   end duration      lat       lon
## 1  22       12 37.76520 -122.4165
## 2  14        1 37.79079 -122.4023
## 3  11        1 37.71120 -122.3947
## 4  15        5 37.77730 -122.3948
## 5  11        1       NA        NA
## 6  11        1 37.72704 -122.4001

Plotting locations on a map

center <- c(mean(dat$lat, na.rm = TRUE), mean(dat$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(dat$lat, na.rm = TRUE), 
                    range(dat$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, dat$lat, dat$lon, col = "#ed4964", pch=20)

Types of food

foods <- dat$optionaltext

b <- c("Burritos","burritos")
dat$has_b <- str_detect(foods, pattern = paste(b, collapse = '|'))

t <- c("Tacos","tacos")
dat$has_t <- str_detect(foods, pattern = paste(t, collapse = '|'))

q <- c("Quesadillas","quesadillas")
dat$has_q <- str_detect(foods, pattern = paste(q, collapse = '|'))
burritos <- data.frame(filter(dat, dat$has_b))
head(burritos)
##   DayOfWeekStr starttime endtime  PermitLocation
## 1       Friday      10AM    10PM 200 SHOTWELL ST
## 2       Friday       1PM     2PM    3335 17TH ST
## 3       Friday      10AM    11AM  2045 EVANS AVE
## 4       Friday      12PM     1PM  1801 EVANS AVE
## 5       Friday       9AM    11AM    1650 03RD ST
## 6       Friday      11AM     2PM     225 BUSH ST
##                                                                      optionaltext
## 1             Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2       Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 3       Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 4       Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 5       Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 6 Chicken Tiki Masala Burritos, Paneer Tiki Masala Burritos, Samosas, Mango Lassi
##   ColdTruck         Applicant                             Location start
## 1         N Santana ESG, Inc. (37.7651967350509,-122.416451692902)    10
## 2         Y  Natan's Catering (37.7633319911646,-122.420235403432)    13
## 3         Y  Natan's Catering (37.7477067391559,-122.396413656839)    10
## 4         Y  Natan's Catering  (37.745078648302,-122.392261844141)    12
## 5         Y  Natan's Catering   (37.76833824373,-122.389400461508)     9
## 6         N      Curry Up Now (37.7910703986756,-122.401145196973)    11
##   end duration      lat       lon has_b has_t has_q
## 1  22       12 37.76520 -122.4165  TRUE  TRUE  TRUE
## 2  14        1 37.76333 -122.4202  TRUE FALSE FALSE
## 3  11        1 37.74771 -122.3964  TRUE FALSE FALSE
## 4  13        1 37.74508 -122.3923  TRUE FALSE FALSE
## 5  11        2 37.76834 -122.3894  TRUE FALSE FALSE
## 6  14        3 37.79107 -122.4011  TRUE FALSE FALSE
center <- c(mean(burritos$lat, na.rm = TRUE), mean(burritos$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(burritos$lat, na.rm = TRUE), 
                    range(burritos$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, burritos$lat, burritos$lon, col = "#ed4964", pch=20)

tacos <- data.frame(filter(dat, dat$has_t))
head(tacos)
##   DayOfWeekStr starttime endtime        PermitLocation
## 1       Friday      10AM    10PM       200 SHOTWELL ST
## 2       Friday      12AM     5AM   1200 MISSISSIPPI ST
## 3       Friday       9AM    10PM      2598 HARRISON ST
## 4       Friday      10AM    11AM       409 ILLINOIS ST
## 5       Friday      11AM     3PM 180 NEW MONTGOMERY ST
## 6       Friday       9PM    12AM        1501 FOLSOM ST
##                                                                                                                                                                                                                                optionaltext
## 1                                                                                                                                                                       Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2                                                                                                                                                       Cold Truck: sandwiches, corndogs, tacos, yogurt, snacks, candy, hot and cold drinks
## 3                                                                                                                                                                       Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 4 Cold Truck: Hot & Cold Sandwiches, Bagels, Burritos, Soups, Hot Dogs, Tacos, Pork Buns, BBQ Meat, Fruit, Various Beverages, Pasties, Pre-Packaged Snacks, Candy, Salads, Muffins, Scones, Brownies, Croissants, Energy Bars, Noodle Bowls
## 5                                                                                                                                                                                                              Tacos, burritos, quesadillas
## 6                                                                                                                                                                                                             Tacos, burritos, soda & juice
##   ColdTruck         Applicant                             Location start
## 1         N Santana ESG, Inc. (37.7651967350509,-122.416451692902)    10
## 2         Y      M M Catering (37.7508581374316,-122.394102374471)     0
## 3         N Santana ESG, Inc. (37.7558763209725,-122.412271386632)     9
## 4         Y  Two G's Catering (37.7667867792956,-122.388078331989)    10
## 5         N   Plaza Garibaldy (37.7863630776208,-122.399264358097)    11
## 6         N    GOZA GOZA TACO  (37.771814022357,-122.413989317366)    21
##   end duration      lat       lon has_b has_t has_q
## 1  22       12 37.76520 -122.4165  TRUE  TRUE  TRUE
## 2   5        5 37.75086 -122.3941 FALSE  TRUE FALSE
## 3  22       13 37.75588 -122.4123  TRUE  TRUE  TRUE
## 4  11        1 37.76679 -122.3881  TRUE  TRUE FALSE
## 5  15        4 37.78636 -122.3993  TRUE  TRUE  TRUE
## 6   0      -21 37.77181 -122.4140  TRUE  TRUE FALSE
center <- c(mean(tacos$lat, na.rm = TRUE), mean(tacos$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(tacos$lat, na.rm = TRUE), 
                    range(tacos$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, tacos$lat, tacos$lon, col = "#ed4964", pch=20)

quesadillas <- data.frame(filter(dat, dat$has_q))
head(quesadillas)
##   DayOfWeekStr starttime endtime    PermitLocation
## 1       Friday      10AM    10PM   200 SHOTWELL ST
## 2       Friday      10AM    11AM   1828 EGBERT AVE
## 3       Friday      10AM    11AM     2701 GREEN ST
## 4       Friday      10AM    11AM  3100 PACIFIC AVE
## 5       Friday      12PM     1PM 1150 FRANCISCO ST
## 6       Friday       9AM    10PM  2598 HARRISON ST
##                                                                                                                                                                                                                                                                                                                                optionaltext
## 1                                                                                                                                                                                                                                                                       Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2 Cold Truck: Cheeseburgers, Burgers, Chicken Bake, Chili Dogs, Hot Dogs, Corn Dogs, Cup of Noodles, Egg Muffins, Tamales, Hot Sandwiches Quesadillas, Gatorade, Juice, Soda, Mikl, Coffee, Hot Cocoa, Hot Tea, Flan, Fruits, Fruit Salad, Yogurt, Candy, Chips,  Donuts, Cookies, Granola, Muffins & Various Drinks & Pre-Packaged Snacks.
## 3                                                                                 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 4                                                                                 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 5                                                                                 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 6                                                                                                                                                                                                                                                                       Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
##   ColdTruck         Applicant                             Location start
## 1         N Santana ESG, Inc. (37.7651967350509,-122.416451692902)    10
## 2         Y     Bach Catering (37.7270392647114,-122.400141029645)    10
## 3         Y    D & T Catering (37.7950473983156,-122.443611961361)    10
## 4         Y    D & T Catering (37.7919274798426,-122.446351899572)    10
## 5         Y    D & T Catering (37.8033613224352,-122.424123509274)    12
## 6         N Santana ESG, Inc. (37.7558763209725,-122.412271386632)     9
##   end duration      lat       lon has_b has_t has_q
## 1  22       12 37.76520 -122.4165  TRUE  TRUE  TRUE
## 2  11        1 37.72704 -122.4001 FALSE FALSE  TRUE
## 3  11        1 37.79505 -122.4436 FALSE FALSE  TRUE
## 4  11        1 37.79193 -122.4464 FALSE FALSE  TRUE
## 5  13        1 37.80336 -122.4241 FALSE FALSE  TRUE
## 6  22       13 37.75588 -122.4123  TRUE  TRUE  TRUE
center <- c(mean(quesadillas$lat, na.rm = TRUE), mean(quesadillas$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(quesadillas$lat, na.rm = TRUE), 
                    range(quesadillas$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, quesadillas$lat, quesadillas$lon, col = "#ed4964", pch=20)